package com.class05.jsp;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassDescription:
 * 快速返回一个jsp页面
 * @JdkVersion: 17
 * @Author: yxy
 * @Created: 2023/12/7 14:16
 */
@RequestMapping("jsp")
@Controller
//@ResponseBody//返回json的注解，添加到类和方法上
public class JspController {
    /**
     * todo 快速查找视图
     * 1.方法的返回值是字符串类型，就是jsp的文件名:index
     * 2.不能添加@ResponseBody，如果加了的话直接返回给字符串给浏览器，不找视图，不走视图解析器
     * 3.返回值  对应中间的视图名称即可
     * http://localhost:8080/jsp/forward1
     * 协议：//ip:端口/应用程序上下文名字/类路径名/方法是指定的名字
     * springmvc/jsp/index
     * @param request
     * @return
     */
    @GetMapping("index")
    public String index(HttpServletRequest request){
        StringBuffer requestURL = request.getRequestURL();
        request.setAttribute("url",requestURL);
        return "index";
    }
    @GetMapping("forward1")//原生api的方式
    public void forward1(HttpServletRequest request, HttpServletResponse response){
        try {
            List<String> list = new ArrayList<>();
            //
            list.add("以下是《姑娘别哭泣》的歌词，由柯柯柯啊演唱：\n" +
                    "\n" +
                    "突来的消息 那个人是你\n" +
                    "这么多年 你杳无音讯\n" +
                    "可是我就在你心里。");
            request.setAttribute("hello",list);
            request.getRequestDispatcher("index").forward(request,response);
        } catch (ServletException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 转发：只能是项目下的资源
     * 1.方法的返回值写成字符串
     * 2.不能添加@ResponseBoby注解
     * 3.返回的字符串前 forward: /转发地址
     * @param model
     * @return
     */
    @GetMapping("forward2")//使用springmvc的方式
    public String forward2(Model model){
        List<String> list = new ArrayList<>();
        //
        list.add("以下是《姑娘别哭泣》的歌词，由柯柯柯啊演唱：\n" +
                "\n" +
                "突来的消息 那个人是你\n" +
                "这么多年 你杳无音讯\n" +
                "可是我就在你心里。");
        model.addAttribute("list",list);
        return "forward:index";
    }


    /**
     * 重定向：只能是项目下的资源
     * 1.方法的返回值写成字符串
     * 2.不能添加@ResponseBoby注解
     * 3.返回的字符串前 redirect: /重定向地址
     * @param model
     * @return
     */
    /**
     * 路径细节：[不要使用springmvc  request response]
     * 1、转发是项目下的资源跳转。路径：项目下的地址  /jsp/index 忽略
     * 在部署时applicationContext处去配置
     * 2、重定向项目下的资源可以是项目外的地址  重定向属于二次请求
     * 路径：项目下的地址 全地址  springmvc/jsp/index 不忽略
     * 在部署时applicationContext处去配置
     * 3.使用springmvc路径语法；
     * "forward:路径  | redirect:路径  重定向，资源的地址不需要写项目根路径!   /jsp/index
     * "
     */
    @GetMapping("redirect1")//原生api实现重定向
    public void redirect1(HttpServletResponse response) throws IOException {
        response.sendRedirect("https://xinghuo.xfyun.cn/desk");
    }
    @GetMapping("redirect2")//使用springmvc实现重定向,重定向当前工程资源
    public String  redirect2() {
        return "redirect:index";
    }
    @GetMapping("redirect3")//使用springmvc实现重定向,重定向外资源
    public String redirect3() {
        return "redirect:https://xinghuo.xfyun.cn/desk";
    }
}
